package ar.com.arkios.kfconsap.rfc;

import ar.com.arkios.kfconmodelo.modelo.BultoPorEmbalador;
import ar.com.arkios.kfconmodelo.modelo.Pallet;
import ar.com.arkios.kfconsap.excepciones.DataTypeInvalidConversionException;
import ar.com.arkios.kfconsap.excepciones.RFCNotFoundException;
import ar.com.arkios.kfconsap.excepciones.SapGeneralException;
import ar.com.arkios.kfconsap.excepciones.TableNotFoundException;
import ar.com.arkios.kfconsap.tablas.BultoPorEmbaladorDAO;
import ar.com.arkios.kfconsap.tablas.NotifDAO;
import ar.com.arkios.kfconsap.tablas.ReturnDAO;
import com.sap.mw.jco.JCO.Function;
import java.io.IOException;
import java.util.List;


/**
 *
 * @author Ale
 * @version 1.01
 * Clase PalletCajasInputRFC que corresponde a 
 * Remote Call Function PalletCajasInputRFC
 * 
 */
public class PalletCajasInputRFC extends GenericRFC {
    
    /**
     * Atributos:
     * myBultoPorEnvaseDAO del tipo BultoPorEmbaladorDAO
     * myNotifDAO del tipo NotifDAO
     * myReturnDAO del tipo ReturnDAO
     */
    private BultoPorEmbaladorDAO myBultoPorEnvaseDAO;
    private NotifDAO myNotifDAO;
    private ReturnDAO myReturnDAO;
    private String myTransactionID;

    /**
     * 
     * @throws java.io.IOException
     */
    public PalletCajasInputRFC() throws SapGeneralException {
        super();
        super.setRfcName("ZRFC_INPUT_PAL_CA_1");
        super.setTieneParametrosRFC(false);
        try {
            super.createFunction();
        } catch (RFCNotFoundException ex) {
            throw new SapGeneralException(ex.getMessage());
        }
    }

    /**
     * 
     * @return myBultoPorEnvaseDAO del tipo BultoPorEmbaladorDAO
     */
    public BultoPorEmbaladorDAO getMyBultoPorEnvaseDAO() {
        return myBultoPorEnvaseDAO;
    }

    /**
     * 
     * @return myNotifDAO del Tipo getMyNotifDAO
     */
    public NotifDAO getMyNotifDAO() {
        return myNotifDAO;
    }

    /**
     * 
     * @return myReturnDAO del tipo ReturnDAO
     */
    public ReturnDAO getMyReturnDAO() {
        return myReturnDAO;
    }
    
    /**
     * Override del metodo loadTables de GenericRFC         
     */
    @Override
    public void loadTables() throws DataTypeInvalidConversionException, TableNotFoundException {
        this.myNotifDAO = new NotifDAO(super.getMyFunction());
        this.myBultoPorEnvaseDAO = new BultoPorEmbaladorDAO(super.getMyFunction());
        this.myReturnDAO = new ReturnDAO(super.getMyFunction());
        
    }    

    
    /**
     * Aca hay que enviar los Datos para subir a SAP
     * @param losPallets
     * @param losBultos
     * Los parametros son Listas.
     */
    public void saveAll(List<Pallet> pallets, List<BultoPorEmbalador> bultos) throws SapGeneralException, DataTypeInvalidConversionException, TableNotFoundException{
        this.myNotifDAO = new NotifDAO(super.getMyFunction());
        this.myBultoPorEnvaseDAO = new BultoPorEmbaladorDAO(super.getMyFunction());
        //this.myReturnDAO = new ReturnDAO(super.getMyFunction());
        
        this.myNotifDAO.insert(pallets);        
        this.myBultoPorEnvaseDAO.insert(bultos);

    }
    


    public void executeFunction(String transactionID){
        this.myTransactionID = transactionID;
        super.getMyConnection().getConnection().execute((Function)super.getMyFunction(), transactionID);
        
    }
    
    public void executeReturn() throws SapGeneralException, DataTypeInvalidConversionException, TableNotFoundException{
        this.myReturnDAO = new ReturnDAO(super.getMyFunction());
        this.executeFunction();
        this.myReturnDAO.findAll();
    }

    @Override
    public void executeFunction() {
        super.getMyConnection().getConnection().execute((Function)super.getMyFunction());
    }
    
    public void clearData(){
        this.myNotifDAO.clearTableData();
        this.myBultoPorEnvaseDAO.clearTableData();
    }
    
    
}
